#include "../game.h"
#include "pjas.h"
#include "bonde.h"

/*---------------------------------

Bonde::Bonde( bool spelare, short x, short y )
virtual
Konstruktor. Sätter bild, funktionspekare och pjästyp

---------------------------------*/

Bonde::Bonde( bool spelare, short x, short y ) : Pjas(spelare, x, y) {
	bild = video.loadImage( spelare == VIT ? "vit_bonde.bmp" : "svart_bonde.bmp" );
	typ = BONDE;
}

/*---------------------------------

Bonde::mojligtDrag( void )
overloadad, virtual (från Pjas)
Bonden kallar denna funktion för att fylla mojligaDrag med möjliga drag.
En "generaliserad" funktion av mojligtDrag(x,y).
Sätter: 0 friend i vägen, 1 kan gå, 2 fiendepjäs man kan ta

---------------------------------*/

void Bonde::mojligtDrag( void ) {
	for( int i = 0; i < 8; i++ ) {
		for( int j = 0; j < 8; j++ ) {
			mojligaDrag[i][j] = NEJ;
		}
	}

	int rad_ett_fram = ypos + ( spelare == VIT ? -1 : 1 );
	int rad_tva_fram = ypos + ( spelare == VIT ? -2 : 2 );

	// Kan den gå ett steg framåt?
	if( game->pjasArray[xpos][rad_ett_fram] == NULL ) {
		mojligaDrag[xpos][rad_ett_fram] = JA;

		// Om ja, kan den gå två steg framåt?
		if ( game->pjasArray[xpos][rad_tva_fram] == NULL && ypos == Spelare::ovreRad( spelare ) ) {
			mojligaDrag[xpos][rad_tva_fram] = JA;
		}
	}

	// Kan den ta en pjäs?
	Pjas* test;
	if ( xpos > 0 ) {
		//Vanligt sätt
		test = game->pjasArray[xpos-1][rad_ett_fram];
		if( test && test->spelare == !spelare ) {
			test->hotad = true;
			mojligaDrag[xpos-1][rad_ett_fram] = HOTAR;
		}

		//En passant
		test = game->pjasArray[xpos-1][ypos];
		if( test && test->spelare != spelare && test->typ == BONDE ) {
			Game::Drag::Position fran = game->drag.back().fran;
			Game::Drag::Position till = game->drag.back().till;
			if( till.y == ypos && till.x == xpos-1 && fran.y == rad_tva_fram && fran.x == xpos-1 ) {
				test->hotad = true;
				mojligaDrag[xpos-1][rad_ett_fram] = HOTAR;
			}
		}
	}
	if ( xpos < 7 ) {
		//Vanligt sätt
		test = game->pjasArray[xpos+1][rad_ett_fram];
		if( test && test->spelare == !spelare ) {
			test->hotad = true;
			mojligaDrag[xpos+1][rad_ett_fram] = HOTAR;
		}

		//En passant
		test = game->pjasArray[xpos+1][ypos];
		if( test && test->spelare != spelare && test->typ == BONDE ) {
			Game::Drag::Position fran = game->drag.back().fran;
			Game::Drag::Position till = game->drag.back().till;
			if( till.y == ypos && till.x == xpos+1 && fran.y == rad_tva_fram && fran.x == xpos+1 ) {
				test->hotad = true;
				mojligaDrag[xpos+1][rad_ett_fram] = HOTAR;
			}
		}
	}
}
